import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Ten {

	public static void main(String[] args) {
	      
	      
	      
		CircSinglyLinkedList10<Integer> a=new CircSinglyLinkedList10<Integer>();
	      for(int i=0;i<20;i++) {
	    	  a.append((int)(Math.random()*100+1));
	      }
	      a.showList();
	      a.remove(5);
	      a.showList();
	      
	}

}
class CircSinglyLinkedList10<T extends Comparable> implements LList{
	
    Node<T> head=new Node<T>();
	 int size=0;
	
	 
	
		

	 
	 public CircSinglyLinkedList10() {
		// TODO 自动生成的构造函数存根
	}



	public void showList() {
		    Node<T> p=this.head;
			for(int i=0;i<=this.size;i++) {
				System.out.print(p.date+" ");
				p=p.next;
			}
			System.out.println();
		}
	 
	 
	

	@Override
	public int length() {
		
		return this.size;
	}

	@Override
	public T get(int i) {
		
		if(i<0||i>this.size){
			return null;
		}
		
		Node<T> p=this.head;
      
		for(int j=0;j<i;j++) {
			p=p.next;
		}
		return p.date;
	}

	@Override
	public boolean set(int i, Comparable x) {
		if(i>this.size||i<0)
			return false;
		Node<T> p=this.head;
		for(int j=0;j<i;j++) {
			p=p.next;
		}
	   
	    p.date=(T)x;
	    
	    
	    return true;
	}


	@Override
	public boolean insert(int i, Comparable x) {
		if (i > this.size || i < 0)
			return false;
		Node<T> p = this.head;
		for (int j = 0; j<i-1; j++) {
			p = p.next;
		}

		Node<T> node = new Node<T>((T) x, null);
		node.next = p.next.next;
		p.next = node;
       size++;
		return true;

	}

	@Override
	public void append(Comparable x) {
		if(search(x)==null) {
		int i=this.size;
		Node<T> p=this.head;
		for(int j=0;j<i;j++) {
			p=p.next;
		}
		Node<T> node=new Node<T>((T)x,null);
		
		p.next=node;
		size++;
		}
	}

	@Override
	public Comparable remove(int i) {
		if(i>this.size||i<0)
			return false;
		Node<T> p=this.head;
		for(int j=0;j<i-1;j++) {
			p=p.next;
		}
		Node<T> node=p.next;
		p.next=p.next.next;
		
		
		size--;
		
		return node;
	}

	@Override
	public void removeAll() {
		this.head=new Node<T>();
		
	}

	@Override
	public T search(Comparable key) {
		
		Node<T> p=this.head;
		for(int i=0;i<this.size;i++) {
			p=p.next;
			if(p.date.compareTo(key)==0) {
				return p.date;
			}
		}
			
		
		return null;
	}



	@Override
	public boolean isEmpty() {
		// TODO 自动生成的方法存根
		return false;
	}
	
}